﻿#include <iostream>
#include <fstream>
#include <string>

using namespace std;

// 函数：统计字符数
void CharCount(const string& filename) {
    ifstream file(filename); // 打开文件输入流
    if (!file.is_open()) { // 检查文件是否成功打开
        cout << "Error opening file." << endl; // 若打开失败，输出错误信息
        return; // 退出函数
    }

    int charCount = 0; // 初始化字符数变量
    char ch;
    while (file.get(ch)) { // 逐个读取文件中的字符
        charCount++; // 每读取一个字符，字符数加一
    }

    cout << "字符数: " << charCount << endl; // 输出统计结果
    file.close(); // 关闭文件流
}

// 函数：统计单词数
void WordCount(const string& filename) {
    ifstream file(filename); // 打开文件输入流
    if (!file.is_open()) { // 检查文件是否成功打开
        cout << "Error opening file." << endl; // 若打开失败，输出错误信息
        return; // 退出函数
    }

    int wordCount = 0, flag = 0; // 初始化单词数和标志变量
    char ch;
    while (file.get(ch)) { // 逐个读取文件中的字符
        if (ch == ' ' || ch == '\n' || ch == '\t') { // 若遇到空格、换行或制表符
            flag = 0; // 标志重置为0
        }
        else {
            if (flag == 0) { // 若标志为0，表示遇到新单词
                wordCount++; // 单词数加一
                flag = 1; // 标志设为1，表示已统计过该单词
            }
        }
    }

    cout << "单词数: " << wordCount << endl; // 输出统计结果
    file.close(); // 关闭文件流
}

int main(int argc, char* argv[]) {
    if (argc != 3) { // 检查参数个数是否正确
        cout << "Usage: " << argv[0] << " [-c|-w] [input_file_name]" << endl; // 输出正确的使用方法
        return 1; // 程序结束
    }

    string parameter = argv[1]; // 获取参数
    string filename = argv[2]; // 获取文件名

    if (parameter == "-c") { // 如果参数为 -c，统计字符数
        CharCount(filename);
    }
    else if (parameter == "-w") { // 如果参数为 -w，统计单词数
        WordCount(filename);
    }
    else {
        cout << "Invalid parameter. Please use -c for counting characters or -w for counting words." << endl; // 参数无效时提示用户
    }

    return 0; // 返回执行成功
}